# -*- coding: utf-8 -*-

# https://www.cnblogs.com/erhu/p/9567302.html
# __new__使用场景，单例的时候使用的比较多，在对象创建前判断是否已经有了对象，如果有，就不再创建。


# https://zhuanlan.zhihu.com/p/35943253


# 我们先来看一下__init__的用法

class Person(object):
    def __init__(self, name, age):
        print("in __init__")
        self._name = name
        self._age = age

p = Person("Wang", 33)


# 实际上，__init__函数并不是真正意义上的构造函数，__init__方法做的事情是在对象创建好之后初始化变量。
# 真正创建实例的是__new__方法。

class Person(object):
    def __new__(cls, *args, **kwargs):
        print("in __new__")                                                 # new 先调用
        instance = object.__new__(cls)
        return instance

    def __init__(self, name, age):
        print("in __init__")
        self._name = name
        self._age = age


print('new')
p1 = Person("Wang", 33)


